package estado;

import comunicacion.Cliente;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import mensaje.*;
import servidor.GestorPartida;

/**
 * Responsabilidad: Implementar métodos para el estado EsperandoPartida de recepción de mensajes
 * desde el cliente, desde la cola de entrada y envío de errores.
 */

public class EsperandoPartida implements Estado{

    public Mensaje recibeDeSocket(ObjectInputStream objin, EstadoPartida estadoPartida, Cliente cliente){
        Object mensaje;
        MsjCrear mensajeCrear;
        try {
            mensaje = objin.readObject();
            if(mensaje instanceof MsjCrear){
                mensajeCrear = (MsjCrear) mensaje;
                return new MsjCrearPartida(mensajeCrear.getTipoEscenario(), mensajeCrear.getNumJugadores(), cliente);
            }else{
                System.out.println("Mensaje incorrecto para el estado, estado: EsperandoPartida");
                return null;
            }
        } catch (IOException ex) {
            Logger.getLogger(EsperandoPartida.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(EsperandoPartida.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    //¿no habria que enviar error con ACKCrear false? No. despues te explico, medio confuso si lo escribo. rata.
    public Mensaje enviarError(EstadoPartida estadoPartida){
       System.out.println("Por enviar error con MsjAckUnion false");
       MsjAckUnion mensajeAckUnion = new MsjAckUnion(false, 0);
       return mensajeAckUnion;
   }

    public Object recibeDeCola(EstadoPartida estadoPartida, Mensaje mensaje, GestorPartida gestorPartida) {
        return new GestorPartida(mensaje, estadoPartida);
    }
}